
package highvoltage;

import highvoltage.skeletonHelpers.*;

/**
 * Jármûveket a városhatáron elnyelõ osztály.
 * 
 * @author Tomi
 * @version 1.0
 * @created 16-márc.-2010 21:08:05
 */
public class DrainRoadSegment extends RoadSegment implements IVehicleVisitor
{

	public DrainRoadSegment()
	{
		/*Logger.print( "DrainRoadSegment::DrainRoadSegment()", this );
		Logger.ret(); */
	}


	/**
	 * Inicializálja az útelemet.
	 * Valójában nem csinál semmit, de éppen ez a célunk.
	 * A nyelő útelemen ugyanis nem kell, hogy legyen induláskor jármű.
	 */
	@Override
	public void init()
	{
		Logger.print( "DrainRoadSegment::init()", this );
		Logger.ret();
	}



	/**
	 * Végrehajtja a szülõ viselkedését, és kezdeményezi a visitor minta
	 * szerinti visitálást.
	 * 
	 * @param vehicle
	 *            Az útelembe belépõ jármû.
	 */
	public void enter( VehicleWrapper vehicleWrapper )
	{
		Logger.print( "DrainRoadSegment::enter(vehicleWrapper)", this );
		
		Logger.call( "Vehicle::accept(this)", this );
		vehicleWrapper.getVehicle().accept( this );
		
		Logger.ret();
	}

	/**
	 * A Visitor minta szerinti visit metódus.
	 * 
	 * @param vehicle
	 *            Rendõr jármû.
	 */
	public void visitVehicle( Police vehicle )
	{
		Logger.print( "DrainRoadSegment::visitVehicle(Police vehicle)", this );

		Logger.call( "Police::kill()" );
		vehicle.kill();

		Logger.ret();
	}

	/**
	 * A Visitor minta szerinti visit metódus.
	 * 
	 * @param vehicle
	 *            Civil jármû.
	 */
	public void visitVehicle( Civilian vehicle )
	{
		Logger.print( "DrainRoadSegment::visitVehicle(Civilian vehicle)", this );

		Logger.call( "Civilian::kill()" );
		vehicle.kill();

		Logger.ret();
	}

	/**
	 * A Visitor minta szerinti visit metódus.
	 * 
	 * @param vehicle
	 *            Rabló jármûve.
	 */
	public void visitVehicle( Robber vehicle )
	{
		Logger.print( "DrainRoadSegment::visitVehicle(Robber vehicle)", this );

		Logger.call( "Robber::kill()" );
		vehicle.kill();

		Logger.ret();
	}

}
